package com.luo.dao;


import com.luo.pojo.*;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @author Luo
 */
@Mapper
@Component
public interface ArticleDao {
    /**
     * 获取所有文章信息(不含tags)
     * @return 文章列表
     */
    List<Article> queryArticle();

    /**
     * 查询指定id文章
     * @param aid 根据aid查询某篇文章
     * @return Article
     */
    Article selectArticle(Integer aid);

    /**
     * 根据id查询文章类型
     * @param aid 文章id
     * @return 文章类型
     */
    String getArticleCat(Integer aid);
    /**
     * 查询每篇文章对应的tags
     * @param aid 文章aid
     * @return 每篇文章的标签列表
     */
    String[] queryArticleTags(Integer aid);

    /**
     * 查询所有标签
     * @return 标签数组
     */
     List<String> queryTags();

    /**
     * 查询每个标签下的文章
     * @param tag 标签名
     * @return 文章列表
     */
    List<Article> queryTagArticles(String tag);

    /**
     * 按日期分组获取下面格式的字符串数组日期
     * yyyy-mm
     * @return 返回Date对象的列表
     */
    List<Date> queryDate();

    /**
     * 查询所有分类
     * @return 类型列表
     */
    String[] queryCategories();

    /**
     * 查询每个分类下的文章
     * @param category 分类名
     * @return 文章列表
     */
    List<Article> queryCateArticles(String category);

    /**
     * 选择性更新字段数据
     */
    void updateArticle(Article article);

    /**
     * 查询所有标签信息并且按tid排序
     */
    List<Tag> selectTagsById();

    /*************************后台需求处理********************************/

    /**
     * 删除tag
     * @return
     */
    int deleteTag(Integer tid);
    /**
     * 更新tag
     * @return
     */
    int updateTag(Integer tid, String tag);
    /**
     * 模糊查询
     */
    List<Tag> getTagsByTag(String tag);
    /**
     * 插入标签
     * @return
     */
    int insertTag(String tag);


    /**
     * 删除cate
     */
    int deleteCate(Integer cid);
    /**
     * 更新cate
     */
    int updateCate(Integer cid,String cate);
    /**
     * 模糊查询cate
     */
    List<Category> getCateByCate(String cate);
    /**
     * 插入分类
     */
    int insertCate(String cate);
    /**
     * 查询所有cate并按cid排序
     */
    List<Category> selectCateById();

    /**
     * 插入文章
     */
    int insertArticle(Integer cid,String title,Integer isPublish,Integer readTime,String discribe,Integer recommed,String content);
    /**
     * 发布文章时与标签绑定
     */
    int bindArticleAndTag(List<ArticleTag> articleTagList);
    /**
     * 根据文章标题获取文章
     */
    Article getArticleByTitle(String title);

    /**
     *  根据aid更新文章浏览量
     */
    int addArticleViews(int aid,int add_count);

}
